home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / p063b9s.zip / ENTRYRES.PAS next >
Pascal/Delphi Source File  |  1997-06-14  |  68KB  |  1,467 lines

  1. PROGRAM EntryRes;
  2. {╔══════════════════════════════════════════════════════════════════════════╗}
  3. {║ Creates entry screens in PORTAL.RES           Last changed: 21.10.95 SA  ║}
  4. {║                                                                          ║}
  5. {║                         (C) Copyright 1989-95 by                         ║}
  6. {║       Dan Wulff, Jens Sandalgaard, Steen Christensen & S¢ren Ager        ║}
  7. {║                                                                          ║}
  8. {║ This source may not be given to anybody, without the written permission  ║}
  9. {║ from The Portal Team.                                                    ║}
  10. {╚══════════════════════════════════════════════════════════════════════════╝}
  11. {$I POPDEFS.INC}
  12.  
  13. uses use32, oproot,opmenu,opwindow,oproutil,input,globals,poptypes,opframe,opcmd,
  14.      opkey,opentry,opcrt,opselect,opstring,opfield,opedit,opfedit,nodelist,
  15.      mailcfg, resource, Useredit, OpDate, MailScan;
  16.  
  17. VAR
  18.   Esr : PPoPEntryScreen;
  19.   Lib : OplibraryPtr;
  20.   Status : Word;
  21.  
  22. CONST
  23.   BinLo          : RangeType = (rtByte:0);
  24.   BinHi          : RangeType = (rtByte:255);
  25.   Bin32Lo        : RangeType = (rtLong:0);
  26.   Bin32Hi        : RangeType = (rtLong:$7FFFFFFF);
  27.  
  28.   PROCEDURE PutEsr(Num: Byte);
  29.   VAR
  30.     Stat : LongInt;
  31.  
  32.     FUNCTION To3(B: Byte): String;
  33.     BEGIN
  34.       To3:=LongIntForm('@@@',b);
  35.     END;
  36.  
  37.   BEGIN
  38.     Esr^.AllocateScreen;
  39.     Lib^.PutEntry('Esr'+To3(Num),Esr^);
  40.     Stat:=Lib^.GetStatus;
  41.     IF Stat<>0 THEN WriteLn('Error ',Stat,' in Esr',To3(Num)) ELSE WriteLn('Writing Esr',To3(Num));
  42.     IF Lib^.AvailableEntries=0 THEN
  43.     BEGIN
  44.       WRITELN('Directory full');
  45.       HALT;
  46.     END;
  47.     Esr^.Done;
  48.   END;
  49.  
  50.  
  51.  
  52. {=== Choice field Inc procedures ============================================}
  53.  
  54. CONST
  55.   NodeListName : ARRAY[0..2] OF S11 = ('NewNodeList','QuickBBS','R.Access');
  56.   Packers      : Array[1..7] Of S3  = ('ARC','ZIP','LZH','PAK','ZOO','SQZ','ARJ');
  57.  
  58.   PROCEDURE IncModemType(VAR Value; ID: Word; Factor: Integer; VAR s:String);
  59.   BEGIN
  60.     CASE Factor OF
  61.       +1: IF Byte(Value)<7 THEN Inc(Byte(Value)) ELSE Byte(Value):=0;
  62.       -1: IF Byte(Value)>0 THEN Dec(Byte(Value)) ELSE Byte(Value):=7;
  63.     END;
  64.     S:=Cfg.NLCompiler.MTypeStr[Byte(Value)];
  65.   END;
  66.  
  67.   PROCEDURE IncNodelist(VAR Value; ID: Word; Factor: Integer; VAR s:String);
  68.   BEGIN
  69.     CASE Factor OF
  70.       +1: IF Byte(Value)<2 THEN Inc(Byte(Value)) ELSE Byte(Value):=0;
  71.       -1: IF Byte(Value)>0 THEN Dec(Byte(Value)) ELSE Byte(Value):=2;
  72.     END;
  73.     S:=NodelistName[Byte(Value)]
  74.   END;
  75.  
  76.   PROCEDURE IncBBSType(VAR Value; ID:WORD; Factor:Integer; VAR s:STRING);
  77.   CONST
  78.     MaxType=5;
  79.     tab : ARRAY[0..MaxType] OF s8=('None','QuickBBS','Opus 1.03','Opus 1.10','R.Access','Opus 1.20');
  80.   BEGIN
  81.     CASE Factor OF
  82.       +1 : BEGIN
  83.              INC(ShortInt(Value));
  84.              IF ShortInt(Value)>MaxType THEN ShortInt(Value):=0;
  85.            END;
  86.       -1 : BEGIN
  87.              DEC(ShortInt(Value));
  88.              IF ShortInt(Value)<0 THEN ShortInt(Value):=MaxType;
  89.            END;
  90.     END;
  91.     s:=tab[Byte(Value)];
  92.   END;
  93.  
  94.   PROCEDURE IncTaskType(VAR Value; ID: Word; Factor: Integer; VAR s: STRING);
  95.   BEGIN
  96.     CASE Factor OF
  97.       +1 : BEGIN
  98.              INC(ShortInt(Value));
  99.              IF ShortInt(Value)>2 THEN ShortInt(Value):=0;
  100.            END;
  101.       -1 : BEGIN
  102.              DEC(ShortInt(Value));
  103.              IF ShortInt(Value)<0 THEN ShortInt(Value):=2;
  104.            END;
  105.     END;
  106.     CASE Byte(Value) OF
  107.       0 : s:='Normal';
  108.       1 : s:='Function server';
  109.       2 : s:='Function user';
  110.     END;
  111.   END;
  112.  
  113.   PROCEDURE IncNodeStat(VAR Value; ID: Word; Factor: Integer; VAR s:String); far;
  114.   BEGIN
  115.     CASE Factor OF
  116.       +1: IF Byte(Value)<2 THEN Inc(Byte(Value)) ELSE Byte(Value):=0;
  117.       -1: IF Byte(Value)>0 THEN Dec(Byte(Value)) ELSE Byte(Value):=2;
  118.     END;
  119.     S:='';
  120.   END;
  121.  
  122.   PROCEDURE IncFreeArea(VAR Value; ID: Word; Factor: Integer; VAR s:String);
  123.   BEGIN
  124.     CASE Factor OF
  125.       +1: IF Byte(Value)<2 THEN Inc(Byte(Value)) ELSE Byte(Value):=0;
  126.       -1: IF Byte(Value)>0 THEN Dec(Byte(Value)) ELSE Byte(Value):=2;
  127.     END;
  128.     s:='';
  129.   END;
  130.  
  131.   PROCEDURE IncReqOnUs(VAR Value; ID: Word; Factor: Integer; VAR s:String);
  132.   BEGIN
  133.     CASE Factor OF
  134.       +1: IF Byte(Value)<2 THEN Inc(Byte(Value)) ELSE Byte(Value):=0;
  135.       -1: IF Byte(Value)>0 THEN Dec(Byte(Value)) ELSE Byte(Value):=2;
  136.     END;
  137.     s:='';
  138.   END;
  139.  
  140.  
  141. {=== Setup ==================================================================}
  142.  
  143.   PROCEDURE matrix_info;
  144.   VAR
  145.     i:BYTE;
  146.   BEGIN
  147.     WITH Esr^, cfg DO
  148.     BEGIN
  149.       Esr^.init(2,3,79,ScreenHeight-1,2,'Matrix information');
  150.       EsFieldOptionsOn(efRightJustify);
  151.       FOR i:=1 TO 16 DO
  152.       BEGIN
  153.         WITH Cfg.Addresses[i] DO
  154.         BEGIN
  155.           AddIntField('Address '+LongIntForm('##',i)+'   :',i,2,'#####',i,17,100,0,32767,Zone);
  156.           AddIntField(':',i,22,'#####',i,23,100,0,32767,Net);
  157.           AddIntField('/',i,28,'#####',i,29,100,0,32767,Node);
  158.           AddIntField('.',i,34,'#####',i,35,100,0,32767,Point);
  159.         END;
  160.       END;
  161.       EsFieldOptionsOff(efRightJustify);
  162.       AddByteField(  'Main address :',17,2,'##',17,17,101,1,16,cfg.MainAdrNum);
  163.       AddStringField('SysOp name   :',18,2,'',18,17,20,102,cfg.sysop);
  164.       AddStringField('System name  :',19,2,'',19,17,60,103,cfg.system);
  165.       AddIntField(   'Point Net    :',20,2,'#####',20,17,104,0,0,cfg.pointnet);
  166.       AddYesNoField( 'Use fake     :',21,2,'',21,17,105,Cfg.UseFakeAddress);
  167.       SetUserRecord(cfg, SizeOf(cfg));
  168.     END;
  169.   END;
  170.  
  171.   PROCEDURE ModemOptions;
  172.   BEGIN
  173.     WITH Cfg,Esr^ DO
  174.     BEGIN
  175.       Esr^.init(2,3,79,ScreenHeight-1,2,'Standard modem options');
  176.  
  177.  
  178.       addbytefield(  'Comm port      :', 2,2,'#',2,19,120,1,16,modem.commport);
  179.       AddWordField(  'Baud rate      :', 3,2,'#####',3,19,121,300,38400,modem.BaudRate);
  180.       addstringfield('Locked response:', 4,2,'!!!!!!!!!!',4,19,10,122,Modem.LockedBaud);
  181.  
  182.       addstringfield('Modem preinit  :', 5,2,CharStr('X', 40), 5,19,40,123,modem.preinit);
  183.       addstringfield('Modem init     :', 6,2,CharStr('X', 80), 6,19,60,124,modem.Init);
  184.       addstringfield('No answer cmd  :', 7,2,CharStr('X', 40), 7,19,40,125,modem.NoAnswer);
  185.       addstringfield('Hang-up cmd    :', 8,2,CharStr('X', 40), 8,19,40,126,modem.Hangup);
  186.       addstringfield('Modem dial     :', 9,2,CharStr('X', 40), 9,19,40,127,modem.dial);
  187.       addstringfield('Modem answer   :',10,2,CharStr('X', 40),10,19,40,128,modem.answer);
  188.       addstringfield('Modem busy     :',11,2,CharStr('X', 40),11,19,40,129,modem.busy);
  189.  
  190.       AddYesNoField( 'Check connect  :',12,2,'',12,19,130,ConnectFastest);
  191.       AddTimeField(  'Modem re-init  :',13,2,'hh:mm:ss',13,19,131,0,0,modem.reinit);
  192.       AddTimeField(  'Time to Wait   :',14,2,'hh:mm:ss',14,19,132,0,SecondsInDay,Modem.WaitTime);
  193.       SetUserRecord(cfg, SizeOf(cfg));
  194.     END;
  195.   END;
  196.  
  197.   PROCEDURE AdvModemOptions;
  198.   VAR
  199.     i:BYTE;
  200.   BEGIN
  201.     WITH Cfg,Esr^ DO
  202.     BEGIN
  203.       Esr^.init(2,3,79,ScreenHeight-1,2,'Advanced modem options');
  204.       AddYesNoField(   'Internal fax  :',2,2,'',2,18,146,Modem.InternalFax);
  205.       AddStringField(  'Link stat cmd :',4,2,'',4,18,10,147,Modem.LinkStat);
  206.       AddByteField(    'Log # of lines:',5,2,'###',5,18,148,0,255,Modem.LogLines);
  207.       FOR i:=1 TO 5 DO
  208.       BEGIN
  209.         AddStringField('Exit connect '+Long2Str(i)+':',6+i,2,'!!!!!!!!!!',6+i,18,10,140,Modem.ExitStr[i].ConStr);
  210.         AddByteField(  'Errorlevel :',6+i,31,'###',6+i,44,141,0,255,Modem.ExitStr[i].ErrLvl);
  211.       END;
  212.  
  213.       FOR i:=0 TO 7 DO
  214.       BEGIN
  215.         addchoicefield('Type',13,2,'XXXXX',14+i,2,142,1,IncModemType,Modem.ModemType[i].Bit);
  216.         addstringfield('Dial string',13,9,CharStr('X',30),14+i,9,40,143,Modem.ModemType[i].Dial);
  217.         AddWordField(  'Baud rate',13,41,'#####',14+i,41,144,0,38400,Modem.ModemType[i].Baud);
  218.         AddYesNoField( 'Call',13,60,'',14+i,60,145,modem.modemtype[i].DialOut);
  219.       END;
  220.       SetUserRecord(cfg, SizeOf(cfg));
  221.     END;
  222.   END;
  223.  
  224.   PROCEDURE MakeMdmConnStat;
  225.   VAR
  226.     i : Byte;
  227.   BEGIN
  228.     WITH Cfg,Esr^ DO
  229.     BEGIN
  230.       Esr^.init(2,3,79,ScreenHeight-1,2,'Connect statistics');
  231.       for i:=1 to 5 do
  232.       addstringfield('Protocol #'+Long2Str(i)+':', 1+i,2,'!!!!!',1+i,15,5,820,Statistics.MdmProtocol[i]);
  233.       SetUserRecord(cfg, SizeOf(cfg));
  234.     END;
  235.   END;
  236.  
  237.  
  238.   procedure dirandfiles;
  239.   begin
  240.     WITH Esr^ DO
  241.     BEGIN
  242.       Esr^.init(2,3,79,ScreenHeight-3,2,'Directories & files');
  243.       addstringfield('Unknown inbound  :',2,2,charstr('!',67),2,21,50,160,cfg.inbound[nsUnknown]);
  244.       addstringfield('Known inbound    :',3,2,charstr('!',67),3,21,50,160,cfg.inbound[nsKnown]);
  245.       addstringfield('Password inbound :',4,2,charstr('!',67),4,21,50,160,cfg.inbound[nsPassword]);
  246.       addstringfield('Outbound         :',5,2,charstr('!',67),5,21,50,161,cfg.outbound);
  247.       addstringfield('Nodelist         :',6,2,charstr('!',67),6,21,50,162,cfg.NodeList);
  248.       addstringfield('User filename    :',7,2,charstr('!',67),7,21,50,163,cfg.BBS.UserFile);
  249.       addstringfield('Log filename     :',9,2,charstr('!',67),9,21,50,164,cfg.logfilename);
  250.       addbytefield(  'Log level        :',10,2,'#',10,21,165,0,5,cfg.loglevel);
  251.       AddYesNoField( 'Use year in log  :',11,2,'',11,21,166,cfg.UseYearInLog);
  252.       addstringfield('Default macros   :',13,2,charstr('!',67),13,21,50,167,cfg.Defaultmacro);
  253.       addstringfield('Editor           :',14,2,charstr('X',67),14,21,50,168,cfg.editor);
  254.       addstringfield('BBS path         :',15,2,charstr('!',67),15,21,50,169,cfg.BBS.Path);
  255.       addstringfield('Swap path        :',16,2,charstr('!',67),16,21,50,170,cfg.SwapDir);
  256.       addchoicefield('BBS type         :',17,2,'XXXXXXXXXXXXXXX',17,21,171,1,IncBBSType,cfg.BBS.BBSType);
  257.       addstringfield('Banner           :',18,2,charstr('!',67),18,21,50,172,cfg.banner);
  258.       addchoicefield('Nodelist type    :',19,2,'XXXXXXXXXXX',19,21,173,1,IncNodelist,Cfg.NodelistTyp);
  259.       SetUserRecord(cfg, SizeOf(cfg));
  260.     END;
  261.   END ;
  262.  
  263.   PROCEDURE MakeEventScreen;
  264.   BEGIN
  265.     Esr^.init(2,3,79,22,3,'Event');
  266.     WITH Esr^,CurrentEvent DO
  267.     BEGIN
  268.       addtimefield(  'Start time       :',2,2,'hh:mm',2,21,180,0,0,Start);
  269.       addtextfield(  'Init  Mail  Poll  File',3,21);
  270. {      EsFieldOptionsOn(efRightJustify);}
  271.       addbytefield(  'Exit errorlevels :',4,2,'###',4,21,181,0,255,initexit);
  272.       addbytefield(  'Exit errorlevels :',4,2,'###',4,27,182,0,255,mailexit);
  273.       addbytefield(  'Exit errorlevels :',4,2,'###',4,33,183,0,255,pollexit);
  274.       addbytefield(  'Exit errorlevels :',4,2,'###',4,39,184,0,255,filesexit);
  275.  
  276.       addbytefield(  'Max. bad WaZoo   :',5,2,'###',5,21,185,0,0,tries.bad);
  277.       addbytefield(  'Max. busy    :',5,40,'###',5,55,186,0,0,tries.busy);
  278. {      EsFieldOptionsOff(efRightJustify);}
  279.  
  280.       addtimefield(  'Call frequency   :',6,2,'hh:mm:ss',6,21,187,0,0,calltime);
  281.       addtimefield(  'Max. delay   :',6,40,'hh:mm:ss',6,55,188,0,0,callwidth);
  282.  
  283.       addstringfield('Description      :',7,2,CharStr('X',20),7,21,20,189,Description);
  284.       WITH ConnectTo DO
  285.       BEGIN
  286.         EsFieldOptionsOn(efRightJustify);
  287.         AddIntField( 'Connect to       :',8,2,'#####',8,21,190,0,0,Zone);
  288.         AddIntField( ':',8,26,'#####',8,27,190,0,0,Net);
  289.         AddIntField( '/',8,32,'#####',8,33,190,0,0,Node);
  290.         AddIntField( '.',8,38,'#####',8,39,190,0,0,Point);
  291.         EsFieldOptionsOff(efRightJustify);
  292.     END;
  293.       addtextfield(  'MTWTFSSA',9,21);
  294.       AddUserField(  'Active days      :',10,2,'22222222',10,21,8,191,BinLo,BinHi,1,0,ValidateBin,BinConv,DrawString,
  295.                     StringEditor,Active);
  296. {      EsFieldOptionsOn(efRightJustify);}
  297.       addbytefield(  'Date to run      :',11,2,'##',11,21,192,0,31,Day);
  298.       addbytefield(  'Month to run :',11,40,'##',11,55,193,0,12,Month);
  299.  
  300.       addbytefield(  'Task number      :',12,2,'###',12,21,194,0,99,TaskNumber);
  301.       addbytefield(  'Special dial     :',13,2,'###',13,21,195,0,3,SpecDial);
  302.       addbytefield(  'Schedule number  :',14,2,'###',14,21,196,0,0,SchedNumber);
  303.  
  304.       AddWordField(  'Max. cost        :',15,2,'#####',15,21,197,0,0,MaxCost);
  305.       AddLongField(  'Min. mail    :',15, 40,'########',15,55,198,0,0, MinMail);
  306. {      EsFieldOptionsOff(efRightJustify);}
  307.  
  308.       AddTextField(  'Event flags (F7) :',19,2);
  309.       SetUserRecord(CurrentEvent, SizeOf(CurrentEvent));
  310.     END;
  311.   END;
  312.  
  313.   PROCEDURE ConnectionSetup;
  314.   VAR
  315.     I   : BYTE;
  316.   BEGIN
  317.     WITH Esr^ DO
  318.     BEGIN
  319.       Esr^.init(2,3,79,ScreenHeight-3,2,'Connection SetUp');
  320.       WITH Cfg.BiMail DO
  321.       BEGIN
  322.         AddStringField('BiModem name        :', 2,2,CharStr('!',79),2,24,54,200,BimodemPath);
  323.         AddWordField(  'Max FullDuplex baud :', 3,2,'#####',3,24,201,0,0,MaxBaud);
  324.         AddStringField('FullDuplex override :', 4,2,'',4,24,10,202,BiOverride[1]);
  325.         FOR i:=2 TO 5 DO
  326.           AddStringField('',4,2,'',4,13+(i*11),10,202,BiOverride[i]);
  327.         AddYesNoField( 'Override NoSend     :', 5,2,'',5,24,203,NoSendOverride);
  328.       END;
  329.       AddYesNoField(   'Use Janus transfers :', 6,2,'', 6,24,204,Cfg.UseJanus);
  330.       AddYesNoField(   'Use EMSI handshake  :', 7,2,'', 7,24,205,Cfg.UseEMSI);
  331.       AddYesNoField(   'Call faster systems :', 8,2,'', 8,24,206,Cfg.FastCalls);
  332.       AddYesNoField(   'Curmudgeon          :', 9,2,'', 9,24,217,Cfg.Curmudgeon);
  333.       AddWordField(    'Minimum BBS Baud    :',10,2,'#####',10,24,207,0,38400,Cfg.BBS.MinBaud);
  334.       AddStringField(  'Slow caller infofile:',11,2,CharStr('!',79),11,24,54,208,Cfg.BBS.MinBaudFile);
  335.       AddByteField(    'User errorlevel     :',12,2,'###',12,24,209,0,255,Cfg.BBS.usererrorlevel);
  336.       Addtimefield(    'Call frequency      :',13,2,'hh:mm:ss',13,24,210,0,0,cfg.calltime);
  337.       Addtimefield(    'Max call delay      :',14,2,'hh:mm:ss',14,24,211,0,0,cfg.callwidth);
  338.       Addtimefield(    'Zone Mail Hour      :',15,2,'hh:mm',15,24,212,0,0,cfg.ZMHStart);
  339.       Addtimefield(    '-',15,30,'hh:mm',15,32,212,0,0,cfg.ZMHEnd);
  340.       AddByteField(    'Max RINGING         :',16,2,'##',16,24,213,0,10,Cfg.MaxRinging);
  341.       AddStringField(  'Press ESC prompt    :',17,2,CharStr('X',79),17,24,54,214,Cfg.PressESCText);
  342.       AddStringField(  'Doing mail text     :',18,2,CharStr('X',79),18,24,54,215,Cfg.DoingMailText);
  343.       AddStringField(  'Enter BBS text      :',19,2,CharStr('X',79),19,24,54,216,Cfg.EnterBBSText);
  344.       SetUserRecord(cfg, SizeOf(cfg));
  345.     END;
  346.   END;
  347.  
  348.   PROCEDURE NetMail;
  349.   BEGIN
  350.     Esr^.init(2,3,79,ScreenHeight-2,2,'Mail scanner: Netmail Options');
  351.     WITH Esr^,Cfg.MailScanner DO
  352.     BEGIN
  353.       AddStringField('Netmail dir   :',2,2,CharStr('!',79),2,18,60,220,NetMailDIr);
  354.       AddYesNoField('Strip crash   :',4,2,'',4,18,221,StripCrash);
  355.       AddYesNoField('Set AKA sent  :',6,2,'',6,18,222,SetAKASent);
  356.       AddYesNoField('Save fwd mail :',8,2,'',8,18,223,SaveFWDMail);
  357.       AddYesNoField('Forward mail  :',10,2,'',10,18,224,ForwardMail);
  358.       AddYesNoField('Kill fwd files:',12,2,'',12,18,225,KillFWDFiles);
  359.       AddByteField( 'Hudson netmail:',14,2,'###',14,18,226,0,0,NetMailBoard);
  360.       SetUserRecord(cfg, SizeOf(cfg));
  361.     END;
  362.   END;
  363.  
  364.   PROCEDURE EchoMail;
  365.   BEGIN
  366.     Esr^.init(2,3,79,Screenheight-1,2,'Mail scanner: Echomail Options');
  367.     WITH Esr^,Cfg.MailScanner DO
  368.     BEGIN
  369.       AddStringField('Save dupes dir:',2,2,CharStr('!',79),2,18,60,240,SaveDupesDir);
  370.       AddWordField(  'Max dupes     :',4,2,'####',4,18,241,0,0,MaxDupes);
  371.       AddStringField('Echotoss log  :',6,2,CharStr('!',79),6,18,60,242,EchoTossLog);
  372.       AddYesNoField( 'Secure        :',8,2,'',8,18,243,Secure);
  373.       AddYesNoField( 'Old extension :',10,2,'',10,18,244,OldExt);
  374.       AddYesNoField( 'Private EMail :',12,2,'',12,18,245,PvtEchoMail);
  375.       SetUserRecord(cfg, SizeOf(cfg));
  376.     END;
  377.   END;
  378.  
  379.   PROCEDURE MakeSchedulerScreen;
  380.   VAR
  381.     i:BYTE;
  382.     Schedule:TSchedule;
  383.   BEGIN
  384.     Esr^.init(2,3,79,24,2,'Schedule');
  385.     WITH Esr^,Schedule DO
  386.     BEGIN
  387.       addbytefield(  'Schedule number    : ',2,2,'###',2,23,280,0,0,Number);
  388.       addbytefield(  'Sched. sub line    : ',4,2,'###',4,23,284,0,0,SubLine);
  389.       AddChoiceField('Action             : ',6,2,'XXXXXXXXXXXXXXXXXXXX',6,23,281,1,MailCfg.IncSCDAction,Schedule.Action);
  390.       AddStringField('Send to            : ',8,2,'',8,23,50,282,Adr[1]);
  391.       AddStringField('',9,2,'',9,23,50,282,Adr[2]);
  392.       AddCharField(  'Stat               :',11,2,'!',11,23,283,#32,#127,Stat);
  393.       SetUserRecord(Schedule, SizeOf(Schedule));
  394.     END;
  395.   END;
  396.  
  397.   PROCEDURE MakeEchoAreas;
  398.   var
  399.     areasrec : TMsgArea;
  400.   BEGIN
  401.     Esr^.init(2,3,79,ScreenHeight-3,2,'Conferences');
  402.     WITH Esr^, AreasRec DO
  403.     BEGIN
  404.       EsFieldOptionsOn(EfRequired);
  405.       AddStringField('Echonames   :',2,2,CharStr('!',32),2,16,20,300,Echonames[1]);
  406.       EsFieldOptionsOff(EfRequired);
  407.       AddStringField('',2,2,CharStr('!',32),2,38,19,300,EchoNames[2]);
  408.       AddStringField('',2,2,CharStr('!',32),2,59,19,300,EchoNames[3]);
  409.       AddStringField('Directory   :',3,2,CharStr('!',79),3,16,62,301,Directory);
  410.       AddStringField('Origin      :',5,2,'',5,16,50,302,Origin);
  411.       AddStringField('Description :',6,2,'',6,16,40,304,Description);
  412.       AddStringField('Send To     :',7,2,'',7,16,50,305,SendTo[1]);
  413.       AddStringField('',8,2,'',8,16,50,305,SendTo[2]);
  414.       AddStringField('Send ONLY   :',10,2,'',10,16,50,306,SendOnly[1]);
  415.       AddStringField('',11,2,'',11,16,50,306,SendOnly[2]);
  416.       AddChoiceField('Address used:',12,2,'XXXXXXXXXXXXXXXXXXXX',12,16,303,1,MailCfg.IncAkaUsed,UsedAKA);
  417.       EsFieldOptionsOn(EfProtected);
  418.       AddStringField('Scramble Pwd:',13,2,'',13,16,20,307,ScramblePwd);
  419.       AddYesNoField( 'Strip SEENBY:',14,2,'',14,16,308,StripSeenBy);
  420.       AddYesNoField( 'Pvt by EMail:',15,2,'',15,16,309,Pvt2EMail);
  421.       EsFieldOptionsOff(EfProtected);
  422.       AddByteField(  'Level       :',16,2,'###',16,16,311,0,0,Level);
  423.       AddYesNoField( 'Import SEEN-BY''s:',15,20,'',15,38,310,ImportSB);
  424.       AddUserField(  'Keys        :',17,2,'11111111',17,16,8,312,BinLo,BinHi,1,0,ValidateBin,BinConv,DrawString,
  425.                      StringEditor,Keys);
  426.       AddWordField(  'Max Scan    :',18,2,'#####',18,16,313,0,0,MaxScan);
  427.       EsFieldOptionsOn(EfProtected);
  428.       AddWordField(  'Scanned     :',13,42,'#####',13,56,0,0,0,Scanned);
  429.       AddDateField(  'Scan date   :',14,42,'dd/mm-yy',14,56,0,0,0,ScanDate);
  430.       EsFieldOptionsOff(EfProtected);
  431.       AddWordField(  'Msg.Max     :',16,42,'#####',16,56,0,0,0,msgcount);
  432.       AddWordField(  'Days old    :',17,42,'#####',17,56,0,0,0,datecount);
  433.       AddByteField(  'Keep msg.   :',18,42,'###',18,56,0,0,0,msgkeep);
  434.       AddByteField(  'Area Type   :',19,42,'#',19,56,0,0,0,AreaType);
  435.  
  436.       SetUserRecord(AreasRec,SizeOf(AreasRec));
  437.     END;
  438.   END;
  439.  
  440.   PROCEDURE MiscOptions;
  441.   BEGIN
  442.     Esr^.init(2,3,79,ScreenHeight-1,2,'Mail scanner: Misc. Options');
  443.     WITH Cfg.MailScanner,Esr^ DO
  444.     BEGIN
  445.       AddStringField('Bad msg. dir. :',2,2,CharStr('!',79),2,18,60,591,BadMsgs);
  446.       AddChoiceField('Default packer:',4,2,'XXX',4,18,593,1,IncArcType,DefaultPacker);
  447.       AddIntField(   'Renum limit   :',6,2,'#####',6,18,0,0,0,renumthresh);
  448.       AddYesNoField( 'Force Write in place mode : ',8,2,'X',8,30,0,ForceWIPMode);
  449.       SetUserRecord(cfg, SizeOf(cfg));
  450.     END;
  451.   END;
  452.  
  453.   PROCEDURE nodelistsegSetup;  { Menu = 25 }
  454.   var
  455.     nodelistsegrec : TNodeListSeg;
  456.   begin
  457.     Esr^.init(2,3,79,ScreenHeight-3,2,'Nodelist Segment Setup');
  458.     WITH Esr^,NodeListSegRec DO
  459.     BEGIN
  460.       AddStringField('Nodelist name      :', 2, 2,'!!!!!!!!', 2, 23, 8,340, NodeListName);
  461.       AddStringField('Nodediff name      :', 4, 2,'!!!!!!!!', 4, 23, 8,341, DiffFileName);
  462.       AddIntField(   'Default zone       :', 6, 2,'#####',6,23,346,0,0,DefaultZone);
  463.       AddYesNoField( 'Check CRC          :', 8, 2,'Y', 8, 23,342, CheckCRC);
  464.       AddStringField('New packed NL path :', 10, 2,CharStr('!', 79), 10, 23, 55,343, NewNLPath);
  465.       AddStringField('Include nodes      :', 12, 2,CharStr('X', 50), 12, 23, 50,344, Include[1]);
  466.       AddStringField(                    '', 13, 17,CharStr('X', 50), 13, 23, 50,344, Include[2]);
  467.       AddStringField('Exclude nodes      :', 15, 2,CharStr('X', 50), 15, 23, 50,345, Exclude[1]);
  468.       AddStringField(                    '', 16, 17,CharStr('X', 50), 16, 23, 50,345, Exclude[2]);
  469.       AddStringField('New packed desc.   :', 18, 2,CharStr('X', 79), 18, 23, 55,347, NewNLDesc);
  470.       SetUserRecord(NodeListSegRec,SizeOf(NodeListSegRec));
  471.     end;
  472.   END;
  473.  
  474.   PROCEDURE NLCompilerTranslationSetup;
  475.   VAR
  476.     Nl : TNLTranslat;
  477.   BEGIN
  478.     Esr^.init(2,3,79,ScreenHeight-3,2,'NodeList Compiler: Translation table');
  479.     WITH Esr^ DO
  480.     BEGIN
  481.       AddTextField('Original                        New',1,2);
  482.       EsFieldOptionsOn(efRequired);
  483.       AddStringField('',2,2,CharStr('!',31),2,2,16,360,Nl.NumFrom);
  484.       EsFieldOptionsOff(efRequired);
  485.       AddStringField('',2,2,CharStr('!',31),2,34,16,361,Nl.NumTo);
  486.       SetUserRecord(Nl,SizeOf(Nl));
  487.     END;
  488.   END;
  489.  
  490.   PROCEDURE NodelistCompilerSetup;  { = 9 }
  491.   VAR
  492.     i : Byte;
  493.   BEGIN
  494.     WITH Esr^ DO
  495.     BEGIN
  496.       Esr^.init(2,3,79,ScreenHeight-1,2,'Nodelist compiler');
  497.       WITH Cfg.NlCompiler DO
  498.       BEGIN
  499.         AddStringField('Costfile name    :',2,2,CharStr('!',57),2,21,79,380,CostFileName);
  500.         AddStringField('Our dial prefix  :',3,2,'',3,21,10,381,OurPrefix);
  501.         AddStringField('Int. dial prefix :',4,2,'',4,21,10,382,IntPrefix);
  502.         AddYesNoField( 'Use FIDOUSER.LST :',5,2,'',5,21,383,UseFidoUserLst);
  503.  
  504.         FOR i:=0 TO 7 DO
  505.         BEGIN
  506.           AddStringField('Modem type #'+Long2Str(i+1)+'    :',7+i,2,'!!!!!',7+i,21,5,384,MTypeStr[i]);
  507.         END;
  508.  
  509.       END;
  510.       SetUserRecord(cfg, SizeOf(cfg));
  511.     END;
  512.   END;
  513.  
  514.   PROCEDURE MakeOkFileScreen;
  515.   var
  516.     okfilerec : TOkFile;
  517.   BEGIN
  518.     WITH EntryCommands, Esr^ DO
  519.     BEGIN
  520.       Esr^.init(2, 3, 79, screenheight-3,2,'Ok-File');
  521.     END;
  522.     WITH Esr^,OkFileRec DO
  523.     BEGIN
  524.       addchoicefield('Node status :', 2,2,'XXX', 2,16,400,1,IncNodeStat,Nodestat);
  525.       AddStringField('Magic name  :', 4,2,'!!!!!!!!!!!!!!!!!!!!', 4, 16, 20,401,magicname);
  526.       esFieldOptionsOn(efRequired);
  527.       AddStringField('File path   :', 6,2,CharStr('!', 79), 6, 16, 62,402,FilePath);
  528.       esFieldOptionsOff(efRequired);
  529.       AddStringField('Password    :', 8,2,'!!!!!!!!!!', 8, 16, 10,403, Password);
  530.       AddByteField(  'Level       :', 10, 2,'999', 10, 16,404, 0, 0, Level);
  531.       AddUserField(  'Keys        :', 12, 2,'11111111',12,16,8,405,BinLo,BinHi,1,0,
  532.                      ValidateBin,BinConv,DrawString,StringEditor,Keys);
  533.       AddChoiceField('Free area   :',14,2,'XXXXXXXXX', 14,16,406,1,IncFreeArea,FreeArea);
  534.  
  535.       AddByteField(  'Task number :', 16, 2,'999', 16, 16,407, 0, 99, TaskNumber);
  536.       SetUserRecord(OkFileRec, SizeOf(okfilerec));
  537.     END;
  538.   END;
  539.  
  540.   procedure limits;
  541.  
  542.     function InitEntryScreen : Word;
  543.     const
  544.       Frame1 = '╔╚╗╝══║║';
  545.       WinOptions = wBordered+wClear+wUserContents;
  546.     begin
  547.       with Esr^ do
  548.       begin
  549.         Esr^.init(2,3,79,ScreenHeight-3,2,'Request options');
  550.  
  551.         AddTextField('--------- Per call ---------',2,12);
  552.         AddTextField('Num.', 3, 14);
  553.         AddTextField('Time', 3, 25);
  554.         AddTextField('Bytes', 3, 35);
  555.  
  556.         AddTextField('--------- Per day ----------',2,45);
  557.         AddTextField('Num.', 3, 47);
  558.         AddTextField('Time', 3, 58);
  559.         AddTextField('Bytes', 3, 68);
  560.         WITH Cfg.Request DO
  561.         BEGIN
  562.           EsFieldOptionsOn(efRightJustify);
  563.           AddWordField('Password :', 4, 2, '99999', 4, 13, 420, 0, 65535, Limit[nsPassword,rlPrCall].MaxFiles);
  564.           AddTimeField('Password :', 4, 2, 'hh:mm:ss', 4, 21, 421, 0, 0, Limit[nsPassword,rlPrCall].Maxtime);
  565.           AddLongField('Password :', 4, 2,'99999999', 4, 32,422, 0, $7FFFFFFF, Limit[nsPassword,rlPrCall].MaxBytes);
  566.  
  567.           AddWordField('Password :', 4, 2, '99999', 4, 46, 420, 0, 65535, Limit[nsPassword,rlPrDay].MaxFiles);
  568.           AddTimeField('Password :', 4, 2, 'hh:mm:ss', 4, 54, 421, 0, 0, Limit[nsPassword,rlPrDay].Maxtime);
  569.           AddLongField('Password :', 4, 2,'99999999', 4, 65,422, 0, $7FFFFFFF, Limit[nsPassword,rlPrDay].MaxBytes);
  570.  
  571.           AddWordField('Known    :', 6, 2,'99999', 6, 13,420, 0, 65535, Limit[nsKnown,rlPrCall].MaxFiles);
  572.           AddTimeField('Known    :', 6, 2,'hh:mm:ss', 6, 21,421, 0, 0, Limit[nsKnown,rlPrCall].Maxtime);
  573.           AddLongField('Known    :', 6, 2,'99999999', 6, 32,422, 0, $7FFFFFFF, Limit[nsKnown,rlPrCall].MaxBytes);
  574.  
  575.           AddWordField('Known    :', 6, 2,'99999', 6, 46,420, 0, 65535, Limit[nsKnown,rlPrDay].MaxFiles);
  576.           AddTimeField('Known    :', 6, 2,'hh:mm:ss', 6, 54,421, 0, 0, Limit[nsKnown,rlPrDay].Maxtime);
  577.           AddLongField('Known    :', 6, 2,'99999999', 6, 65,422, 0, $7FFFFFFF, Limit[nsKnown,rlPrDay].MaxBytes);
  578.  
  579.           AddWordField('Unknown  :', 8, 2,'99999', 8, 13,420, 0, 65535, Limit[nsUnKnown,rlPrCall].MaxFiles);
  580.           AddTimeField('Unknown  :', 8, 2,'hh:mm:ss', 8, 21,421, 0, 0, Limit[nsUnKnown,rlPrCall].Maxtime);
  581.           AddLongField('Unknown  :', 8, 2,'99999999', 8, 32,422, 0, $7FFFFFFF, Limit[nsUnKnown,rlPrCall].MaxBytes);
  582.  
  583.           AddWordField('Unknown  :', 8, 2,'99999', 8, 46,420, 0, 65535, Limit[nsUnKnown,rlPrDay].MaxFiles);
  584.           AddTimeField('Unknown  :', 8, 2,'hh:mm:ss', 8, 54,421, 0, 0, Limit[nsUnKnown,rlPrDay].Maxtime);
  585.           AddLongField('Unknown  :', 8, 2,'99999999', 8, 65,422, 0, $7FFFFFFF, Limit[nsUnKnown,rlPrDay].MaxBytes);
  586.  
  587.           EsFieldOptionsOff(efRightJustify);
  588.  
  589.           AddYesNoField( 'Send RSP-file as message :',11,2,'',11,29,423,Cfg.Request.RspAsPkt);
  590.           AddYesNoField( 'Stop search after match  :',13,2,'',13,29,424,Cfg.Request.SkipAfterFirst);
  591.           AddWordField(  'Minimum baud for request :',15,2,'99999', 15, 29,425, 0, 65535, MinBaud);
  592.  
  593.           AddChoiceField('RequestOnUs              :',17,2,'XXXXXXXXXX', 17,29,426,1,IncReqOnUs,ReqOnUs);
  594.           AddWordField(  'Max cost for RequestOnUs :',18,2,'99999', 18, 29,427, 0, 65535, ReqOnUsCost);
  595.           SetUserRecord(cfg, SizeOf(cfg));
  596.         END;
  597.         InitEntryScreen := RawError;
  598.       end;
  599.     end;
  600.  
  601.   begin
  602.     Status := InitEntryScreen;
  603.     if Status <> 0 then begin
  604.       WriteLn('Error initializing entry screen: ', Status);
  605.       Halt(1);
  606.     end;
  607.   end;
  608.  
  609.   PROCEDURE MakeNodesScreen;
  610.   BEGIN
  611.     Esr^.init(2,3,79,ScreenHeight-3,2,'Nodes setup');
  612.     WITH Esr^,NodesRec DO
  613.     BEGIN
  614.       EsFieldOptionsOn(efRightJustify);
  615.       AddIntField(  'Address         :',2,2,'#####',2,20,440,0,0,Address.Zone);
  616.       AddIntField(  ':',2,25,'#####',2,26,440,0,0,Address.Net);
  617.       AddIntField(  '/',2,31,'#####',2,32,440,0,0,Address.Node);
  618.       AddIntField(  '.',2,37,'#####',2,38,440,0,0,Address.Point);
  619.       AddIntField( 'Pointnet :',2,62,'#####',2,73,441,0,0,PointNet);
  620.  
  621.       EsFieldOptionsOff(efRightJustify);
  622.       AddStringField('Phone number    :',4,2,CharStr('!',19),4,20,22,442,Phone);
  623.       EsFieldOptionsOn(efRightJustify);
  624.       AddChoiceField('Packer          :',4,40,'XXX',4,58,443,1,IncArcType,PackerType);
  625.       AddByteField(  'Level           :',6,2,'###',6,20,444,0,0,Level);
  626.       AddUserField(  'Keys            :',6,40,'11111111',6,58,8,445,BinLo,BinHi,1,0,ValidateBin,BinConv,DrawString,
  627.                      StringEditor,Keys);
  628.       EsFieldOptionsOff(efRightJustify);
  629.       AddStringField('Session password:',8,2,CharStr('!',8),8,20,8,446,SessionPwd);
  630.       AddStringField('PortalFix passwd:',8,40,CharStr('!',20),8,58,20,447,AreafixPwd);
  631.       AddStringField('Packet password :',9,2,CharStr('!',7),9,20,7,448,PktPassword);
  632.       AddStringField('Tick password   :',9,40,CharStr('!',20),9,58,20,449,TickPassword);
  633.  
  634.       AddStringField('Special dial 0  :',11,2,CharStr('X',20),11,20,20,450,SpecialDials[0]);
  635.       AddStringField('Special dial 1  :',12,2,CharStr('X',20),12,20,20,450,SpecialDials[1]);
  636.       AddStringField('Special dial 2  :',13,2,CharStr('X',20),13,20,20,450,SpecialDials[2]);
  637.  
  638.       AddCharField(  'Send flavor     :',15,2,'!',15,20,451,' ','Y',Flavor);
  639.       AddYesNoField( 'Send fwd letter :',15,40,'',15,58,452,SendFwdLetter);
  640.       AddCharField(  'Check connect   :',16,2,'!',16,20,453,' ','Y',CheckConnect);
  641.       AddWordField(  'Min baud:',16,23,'#####',16,33,781,0,0,MinConnectBaud);
  642.  
  643.       AddCharField(  'Use Fake        :',16,40,'!',16,58,454,' ','Y',UseFake);
  644.       AddYesNoField( 'Disallow F.Req. :',17,2,'',17,20,455,DisallowReq);
  645.       AddCharField(  'Use FullDuplex  :',17,40,'!',17,58,456,' ','Y',UseFullDuplex);
  646.       AddCharField(  'Use EMSI        :',18,2 ,'!',18,20,457,' ','Y',UseEmsi);
  647.       AddYesNoField( 'Pack Tick files :',18,40,'',18,58,458,PackTick);
  648.  
  649.       AddTimeField(  'BBS open from   :',19,2,'hh:mm',19,20,459,0,0,OpenFrom);
  650.       AddTimeField(  'to',19,26,'hh:mm',19,29,459,0,0,OpenTo);
  651.       AddYesNoField( 'Sync. time      :',19,40,'',19,58,780,EMSISetTime);
  652.       SetUserRecord(NodesRec, SizeOf(NodesRec));
  653.     END;
  654.   END;
  655.  
  656.   PROCEDURE MakeFwdScreen;
  657.   VAR
  658.     FwdRec : TFileFwd;
  659.   BEGIN
  660.     WITH EntryCommands, Esr^ DO
  661.     BEGIN
  662.       Esr^.init(2,3,79,ScreenHeight-3,2,'Files to forward');
  663.     END;
  664.     WITH Esr^,FwdRec DO
  665.     BEGIN
  666.       AddStringField('Filename         :',1,3,CharStr('!',12),1,22,12,460,FileName);
  667.       EsFieldOptionsOn(efRightJustify);
  668.       AddIntField(  'Accept from:',1,37,'#####',1,50,461,0,0,GetFrom.Zone);
  669.       AddIntField(  ':',1,55,'#####',1,56,461,0,0,GetFrom.Net);
  670.       AddIntField(  '/',1,61,'#####',1,62,461,0,0,GetFrom.Node);
  671.       AddIntField(  '.',1,67,'#####',1,68,461,0,0,GetFrom.Point);
  672.       EsFieldOptionsOff(efRightJustify);
  673.       AddStringField('PortalFix name   :',2,3,'!!!!!!!!!!',2,22,10,462,PortalFixName);
  674.       EsFieldOptionsOn(efRequired);
  675.       AddStringField('Move to          :',3,3,CharStr('!',79),3,22,57,463,WhereToPut);
  676.       EsFieldOptionsOff(efRequired);
  677.       AddYesNoField('Add to FILES.BBS :',4,3,'',4,22,464,AddToFiles);
  678.       AddStringField('Description      :',5,3,CharStr('X',80),5,22,57,465,Description);
  679.       AddWordField('Add before line  :',7,3,'#####',7,22,466,0,0,AddBeforeLine);
  680.       AddYesNoField('Touch file       :',9,3,'',9,22,467,TouchFile);
  681.       AddYesNoField('Kill dupe        :',10,3,'',10,22,468,KillDupe);
  682.       AddYesNoField('Check date       :',11,3,'',11,22,469,CheckDate);
  683.       AddByteField('Keep#:',11,28,'###',11,35,470,0,0,KeepMax);
  684.       AddStringField('Send to          :',13,3,'',13,22,50,471,SendTo[1]);
  685.       AddStringField(':',14,20,'',14,22,50,471,SendTo[2]);
  686.       AddStringField('Do before move   :',16,3,CharStr('X',79),16,22,57,472,BeforeCmd);
  687.       AddStringField('Do after move    :',17,3,CharStr('X',79),17,22,57,473,AfterCmd);
  688.       AddByteField('Level            :',19,3,'###',19,22,474,0,0,Level);
  689.       AddUserField('Keys :',19,28,'11111111',19,35,8,475,BinLo,BinHi,1,0,ValidateBin,BinConv,DrawString,StringEditor,Keys);
  690.       SetUserRecord(fwdrec, SizeOf(fwdrec));
  691.     END;
  692.   END;
  693.  
  694.   PROCEDURE FwdMiscOptions;
  695.   BEGIN
  696.     WITH Esr^ DO
  697.     BEGIN
  698.       Esr^.init(2,3,79,ScreenHeight-1,2,'File forward: Misc. options');
  699.     END;
  700.     WITH Esr^, Cfg.FwdFile DO
  701.     BEGIN
  702.       AddStringField('Secure dir.   :',2,2,CharStr('!',79),2,18,60,480,SecureDir);
  703.       AddStringField('Pre command   :',4,2,CharStr('!',79),4,18,60,481,PreCmd);
  704.       AddStringField('Subject       :',6,2,CharStr('X',72),6,18,60,482,Subject);
  705.       AddYesNoField( 'Private       :',7,2,'',7,18,483,MsgPrivate);
  706.       AddYesNoField( 'KillSent      :',8,2,'',8,18,484,KillSent);
  707.       SetUserRecord(cfg, SizeOf(cfg));
  708.     END;
  709.   END;
  710.  
  711.   PROCEDURE InitTickSetup;  { Menu = 22 }
  712.   VAR
  713.     TickAreaRec : TTickArea;
  714.   begin
  715.     Esr^.init(2,3,79,ScreenHeight-3,2,'Tick: Area setup');
  716.     WITH Esr^,TickAreaRec DO
  717.     BEGIN
  718.       AddStringField('Area name    :', 2, 2,'!!!!!!!!!!!!!!!!!!!!', 2, 17, 20,500, AreaName);
  719.       AddStringField('Group name   :', 3, 2,'!!!!!!!!!!', 3, 17, 10,501, GroupName);
  720.       AddStringField('Human name   :', 4, 2,CharStr('X', 40), 4, 17, 40,502, HumanName);
  721.       AddStringField('Area path    :', 6, 2,CharStr('!', 79), 6, 17, 61,503, AreaPath);
  722.  
  723.       EsFieldOptionsOn(efProtected);
  724.       AddYesNoField( 'Write letter :', 8, 2,'Y', 8, 17,504, WriteLetter);
  725.       AddStringField('Message path :', 9, 2,CharStr('!', 79), 9, 17, 61,505, AnnouncePath);
  726.       EsFieldOptionsOff(efProtected);
  727.  
  728.       AddYesNoField( 'Allow repack :',11, 2,'Y', 11, 17,506, CanBeRepacked);
  729.       AddYesNoField( 'Check CRC :',   11,21,'Y', 11, 33,507, CheckCRC);
  730.       AddChoiceField('Address used:',11,37,'XXXXXXXXXXXXXXXXXXXX',11,50,508,1,MailCfg.IncAkaUsed,AKAToUse);
  731.       AddYesNoField( 'Check dupe   :',12, 2,'Y', 12, 17,514, CheckDupe);
  732.  
  733.       AddStringField('In/Out nodes :',14, 2,CharStr('X', 50), 14, 17, 50,509, GetFrom[1]);
  734.       AddStringField('', 15, 17,CharStr('X', 50), 15, 17, 50,509, GetFrom[2]);
  735.       AddStringField('Out nodes    :', 16, 2,CharStr('X', 50), 16, 17, 50,510, SendTo[1]);
  736.       AddStringField('', 17, 17,CharStr('X', 50), 17, 17, 50,510, SendTo[2]);
  737.       AddByteField(  'Level        :', 19, 2,'999', 19, 17,511, 0, 255, Level);
  738.       AddUserField(  'Keys :',19,23,'11111111',19,30,8,512,BinLo,BinHi,1,0,ValidateBin,BinConv,DrawString,StringEditor,Keys);
  739.       AddStringField('FILES.BBS    :', 20, 2,CharStr('!', 12), 20, 17, 50, 513, FilesBBS);
  740.       SetUserRecord(TickAreaRec, SizeOf(TickAreaRec));
  741.     end;
  742.   END;
  743.  
  744.   PROCEDURE MakeTickMiscScreen;  { Menu = 23 }
  745.   begin
  746.     Esr^.init(2,3,79,ScreenHeight-1,2,'Tick: Misc. setup');
  747.     WITH Esr^,Cfg DO
  748.     BEGIN
  749.       AddStringField('Dupe directory       :', 2, 2,CharStr('!',79), 2, 25, 53,520, Tick.DupeDir);
  750.       AddStringField('Hold directory       :', 3, 2,CharStr('!',79), 3, 25, 53,521, Tick.HoldDir);
  751.       AddStringField('Do before processing :', 4, 2,CharStr('!',79), 4, 25, 53,522, Tick.BeforeMoving);
  752.       AddYesNoField( 'Request missing      :', 5, 2,'Y', 5, 25,523, Tick.RequestMissing);
  753.       SetUserRecord(cfg, SizeOf(cfg));
  754.     end;
  755.   END;
  756.  
  757.   PROCEDURE MakeFuncKeyScreen;
  758.   VAR
  759.     i:BYTE;
  760.   BEGIN
  761.     WITH Esr^ DO
  762.     BEGIN
  763.       Esr^.init(2,3,79,ScreenHeight-1,2,'Function keys');
  764.       AddTextField('#  Lvl  Description (CTRL-keys)',1,3);
  765.       FOR i:=1 TO 10 DO
  766.       BEGIN
  767.         EsFieldOptionsOn(efRightJustify);
  768.         addbytefield(LongIntForm('###',i),1+i,2,'###',1+i,6,540,0,0,cfg.fkey[1,i].errorlevel);
  769.         EsFieldOptionsOff(efRightJustify);
  770.         addstringfield('',1+i,2,'',1+i,11,67,541,cfg.fkey[1,i].description);
  771.       END;
  772.       AddTextField('#  Lvl  Description (ALT-Keys)',13,3);
  773.       FOR i:=1 TO 10 DO
  774.       BEGIN
  775.         EsFieldOptionsOn(efRightJustify);
  776.         addbytefield(LongIntForm('###',i),13+i,2,'###',13+i,6,540,0,0,cfg.fkey[2,i].errorlevel);
  777.         EsFieldOptionsOff(efRightJustify);
  778.         Addstringfield('',13+i,2,'',13+i,11,67,541,cfg.fkey[2,i].description);
  779.       END;
  780.       SetUserRecord(cfg, SizeOf(cfg));
  781.     END;
  782.   END;
  783.  
  784.   PROCEDURE AreaManagerConfiguration;
  785.   BEGIN
  786.     WITH Esr^ DO
  787.     BEGIN
  788.       Esr^.init(2,3,79,ScreenHeight-1,2,'AreaManager setup');
  789.       WITH Cfg.AreaMan DO
  790.       BEGIN
  791.         AddCharField( 'DL. count look  :',2,2,'!',2,20,560,#32,#255,DLCntStart);
  792.         AddCharField( '0',2,21,'!',2,22,560,#32,#255,DLCntStop);
  793.  
  794.         AddByteField( 'Number of digits:',3,2,'#',3,20,567,0,8,DlCDigits);
  795.         AddYesNoField('Zero pad        :',4,2,'',4,20,568,DlCZeroFill);
  796.  
  797.         AddYesNoField('Adopt always    :',6,2,'',6,20,561,AdoptDefault);
  798.         AddYesNoField('Insert DL. count:',8,2,'',8,20,562,InsDLCnt);
  799.         AddYesNoField('Adopt inbound   :',10,2,'',10,20,563,AddInbound);
  800.         addbytefield( 'File areas      :',12,2,'###',12,20,564,0,255,FirstArea);
  801.         addbytefield( '-',12,23,'###',12,24,565,0,0,LastArea);
  802.         addstringfield('View Picture    :',14,2,charstr('X',60),14,20,50,566,ViewCMD);
  803.       END;
  804.       SetUserRecord(cfg, SizeOf(cfg));
  805.     END;
  806.   END;
  807.  
  808.   PROCEDURE DumbTerminalExternalProtocols;
  809.   VAR
  810.     i:BYTE;
  811.   BEGIN
  812.     WITH Cfg, Esr^ DO
  813.     BEGIN
  814.       Esr^.init(2,3,79,ScreenHeight-1,2,'External protocols');
  815.       FOR i:=1 TO 5 DO
  816.       BEGIN
  817.         AddCharField( 'Key     :',i*4-2,2,'!',i*4-2,12,580,#32,#90,extprot[i].key);
  818.         AddStringField('Name :',i*4-2,16,'',i*4-2,23,8,581,extprot[i].name);
  819.         AddYesNoField( 'Prompt DL. name:',i*4-2,34,'',i*4-2,51,582,extprot[i].AskDLName);
  820.         AddStringField('Auto start :',i*4-2,57,'',i*4-2,68,10,583,extprot[i].autostart);
  821.         AddStringField('Send    :',i*4-1,2,CharStr('X',50),i*4-1,12,79,584,extprot[i].sendcmd);
  822.         AddStringField('Receive :',i*4,2,CharStr('X',50),i*4,12,79,585,extprot[i].recvcmd);
  823.       END;
  824.       SetUserRecord(cfg, SizeOf(cfg));
  825.     END;
  826.   END;
  827.  
  828.   PROCEDURE DumbTerminalSetup;
  829.   BEGIN
  830.     WITH Esr^,Cfg.DumbTerm DO
  831.     BEGIN
  832.       Esr^.init(2,3,79,ScreenHeight-3,2,'Dumb terminal misc. options');
  833.       addstringfield('Modem init     :',2,2,'',2,19,40,600,modemInit);
  834.       AddYesNoField( 'CR sends LF    :',4,2,'',4,19,601,CRSendsLF);
  835.       AddYesNoField( 'Destructive BS :',6,2,'',6,19,602,DestructiveBS);
  836.       SetUserRecord(cfg, SizeOf(cfg));
  837.     END;
  838.   END;
  839.  
  840.   PROCEDURE ListFiles;
  841.   BEGIN
  842.     WITH Esr^,Cfg.ListFiles DO
  843.     BEGIN
  844.       Esr^.init(2,3,79,ScreenHeight-3,2,'PoP-List: Directories and files');
  845.       addstringfield('FileList name  :',2,2,charstr('!',79),2,19,50,620,FileList);
  846.       addstringfield('NewsList name  :',4,2,charstr('!',79),4,19,50,621,NewsList);
  847.       addstringfield('Header name    :',6,2,charstr('!',79),6,19,50,622,Header);
  848.       addstringfield('Footer name    :',8,2,charstr('!',79),8,19,50,623,Footer);
  849.       addstringfield('Statistics file:',10,2,charstr('!',79),10,19,50,624,StatFile);
  850.       addstringfield('TopList file   :',12,2,charstr('!',79),12,19,50,625,TopFile);
  851.       addstringfield('Dupe report    :',14,2,charstr('!',79),14,19,50,626,DupeReport);
  852.       addstringfield('Bimodem Ok-File:',16,2,charstr('!',79),16,19,50,632,OkBimodemPath);
  853.       addstringfield('Run CMD before :',18,2,charstr('X',79),18,19,50,627,DoBefore);
  854.       addstringfield('Run pack CMD   :',19,2,charstr('X',79),19,19,50,628,DoPack);
  855.       addstringfield('Run CMD after  :',20,2,charstr('X',79),20,19,50,629,DoAfter);
  856.       SetUserRecord(cfg, SizeOf(cfg));
  857.     END;
  858.   END;
  859.  
  860.   PROCEDURE ListFiles2;
  861.   Var
  862.     x:Byte;
  863.   BEGIN
  864.     WITH Esr^,Cfg.ListFiles DO
  865.     BEGIN
  866.       Esr^.init(2,3,79,ScreenHeight-3,2,'PoP-List: Misc. options');
  867.       AddYesNoField( 'Adopt files    :',2,2,'',2,19,640,Adopt);
  868.       AddByteField(  'NewsList days  :',2,25,'##',2,42,641,0,255,NewsDays);
  869.       AddYesNoField( 'Update OK-File :',2,48,'',2,65,642,OkPortal);
  870.       AddYesNoField( 'Incl statistics:',3,2,'',3,19,643,Stat);
  871.       AddYesNoField( 'Incl TopList   :',3,25,'',3,42,644,IncludeTop);
  872.         EsFieldOptionsOn(EfProtected);
  873.       AddYesNoField( 'Remove missing :',3,48,'',3,65,645,RemMissing);
  874.         EsFieldOptionsOff(EfProtected);
  875.       AddYesNoField( 'European dates :',4,2,'',4,19,646,DkDate);
  876.       AddByteField(  'Top X (numbers):',4,25,'##',4,42,647,0,50,Top);
  877.       AddByteField(  'Dupe threshold :',4,48,'###',4,65,648,0,100,Threshold);
  878.       AddYesNoField( 'Dupe check     :',5,2,'',5,19,649,DupeCheck);
  879.       AddYesNoField( 'Touch Illegal  :',5,25,'',5,42,650,Touch);
  880.         EsFieldOptionsOn(EfProtected);
  881.       AddYesNoField( 'Zap ZeroLength :',5,48,'',5,65,651,ZapZero);
  882.         EsFieldOptionsOff(EfProtected);
  883.       addstringfield('Adopt comment  :',7,2,'',7,19,40,652,AdoptComment);
  884.       addstringfield('Freq NOT OK    :',8,2,'',8,19,55,631,TXTFreq[0]);
  885.       addstringfield('Freq for ALL   :',9,2,'',9,19,55,630,TXTFreq[1]);
  886.       addstringfield('Freq for KNOWN :',10,2,'',10,19,55,630,TXTFreq[2]);
  887.       addstringfield('Freq for PWD   :',11,2,'',11,19,55,630,TXTFreq[3]);
  888.       AddTextField(  'Delete         Exclude       NoDupeCheck  NoAdopt       NoAdopt  Private',13,2);
  889.       AddTextField(  'FileNames      FileNames     FileNames    FileNames     areas    areas  ',14,2);
  890.       For x:=15 to 24 do
  891.       BEGIN
  892.         addstringfield('',x,2,'',x,2,12,653,CrapFiles[x-14]);
  893.         EsFieldOptionsOn(EfProtected);
  894.         addstringfield('',x,17,'',x,17,12,654,ExcludeFiles[x-14]);
  895.         addstringfield('',x,31,'',x,31,8,655,NoDupeCheck[x-14]);
  896.         addstringfield('',x,44,'',x,44,12,656,NonAdoptFiles[x-14]);
  897.         addstringfield('',x,58,'',x,58,3,657,NonAdoptAreas[x-14]);
  898.         EsFieldOptionsOff(EfProtected);
  899.         addstringfield('',x,67,'',x,67,3,658,PrivateAreas[x-14]);
  900.       END;
  901.       SetUserRecord(cfg, SizeOf(cfg));
  902.     END;
  903.   END;
  904.  
  905.   PROCEDURE MultiListSegment;
  906.   Var
  907.     x:Byte;
  908.     FileListSegment: TFileListSegment;
  909.   BEGIN
  910.     WITH Esr^,FileListSegment DO
  911.     BEGIN
  912.       Esr^.init(2,3,79,ScreenHeight-3,2,'Multiple Filelist Segments');
  913.       addstringfield('Segment Name   :',2,2,'',2,19,20,0,Name);
  914.       addstringfield('Filename       :',3,2,charstr('!',79),3,19,50,0,FileName);
  915.       addstringfield('Header File    :',4,2,charstr('!',79),4,19,50,0,HeaderFile);
  916.       addstringfield('Include areas  :',5,2,charstr('!',50),5,19,50,0,IncludeAreas[1]);
  917.       addstringfield('                ',6,2,charstr('!',50),6,19,50,0,IncludeAreas[2]);
  918.       addstringfield('                ',7,2,charstr('!',50),7,19,50,0,IncludeAreas[3]);
  919.       addstringfield('                ',8,2,charstr('!',50),8,19,50,0,IncludeAreas[4]);
  920.       addstringfield('Do after       :',9,2,charstr('!',79),9,19,50,0,DoAfter);
  921.       SetUserRecord(FileListSegment, SizeOf(FileListSegment));
  922.     END;
  923.   END;
  924.  
  925.   PROCEDURE MultiBBSSetUp;
  926.   VAR
  927.     i   : BYTE;
  928.   BEGIN
  929.     WITH Esr^ DO
  930.     BEGIN
  931.       Esr^.init(2,3,79,ScreenHeight-1,2,'Multiple BBS setup');
  932.       AddTextField('Key  Batch file',2,5);
  933.       FOR i:=1 TO 5 DO
  934.         WITH Cfg.BBS.Multi[i] DO
  935.         BEGIN
  936.           AddCharField(  CHR(i+48)+':',2+i*2,3,'!',2+i*2,6,660,' ','Z',Key);
  937.           addstringfield('',1,1,'!!!!!!!!',2+i*2,10,8,661,BatName);
  938.         END;
  939.       SetUserRecord(cfg, SizeOf(cfg));
  940.     END;
  941.   END;
  942.  
  943.   PROCEDURE ArchiverSetUp;
  944.   VAR
  945.     i   : BYTE;
  946.   BEGIN
  947.     Esr^.init(2,3,79,ScreenHeight-1,2,'Archiver setup');
  948.     WITH Esr^ DO
  949.     BEGIN
  950.       FOR i:=1 TO 7 DO
  951.         WITH cfg.Packer[i] DO
  952.         BEGIN
  953.           AddStringField(Packers[i]+' :',1+i*2,2,CharStr('X',40),1+i*2,8,17,680,cfg.Packer[i].AddCmd);
  954.           AddStringField('',1,1,CharStr('X',40),1+i*2,26,17,681,cfg.Packer[i].UnPackCmd);
  955.           AddStringField('',1,1,CharStr('X',40),1+i*2,44,17,682,cfg.Packer[i].TestCmd);
  956.           AddStringField('',1,1,CharStr('X',40),1+i*2,62,17,683,cfg.Packer[i].EraseCmd);
  957.         END;
  958.       AddTextField('Add',2,8);
  959.       AddTextField('Unpack',2,26);
  960.       AddTextField('Test',2,44);
  961.       AddTextField('Erase',2,62);
  962.       SetUserRecord(cfg, SizeOf(cfg));
  963.     END;
  964.   END;
  965.  
  966.   PROCEDURE MiscScreen;
  967.   BEGIN
  968.     WITH Cfg.Screen,Esr^ DO
  969.     BEGIN
  970.       Esr^.init(2,3,79,ScreenHeight-1,2,'Misc. screen options');
  971.       AddTimeField( 'Screenblank timeout  :',2,2,'hh:mm:ss',2,25,740,0,0,blanktime);
  972.       AddYesNoField('43/50 lines          :',4,2,'',4,25,741,ScrMode);
  973.       AddYesNoField('Check for snow       :',6,2,'',6,25,742,ChkSnow);
  974.       AddYesNoField('Keep off screen mode :',8,2,'',8,25,743,KeepOffScrMode);
  975.       AddYesNoField('Exploding windows    :',10,2,'',10,25,744,ExplodingWin);
  976.       AddYesNoField('Hardware screenblank :',12,2,'',12,25,745,HardwareBlank);
  977.       SetUserRecord(Cfg, SizeOf(cfg));
  978.     END;
  979.   END;
  980.  
  981.   procedure globalvalues;
  982.   begin
  983.     with Esr^ do
  984.     begin
  985.       Esr^.init(2,3,79,ScreenHeight-1,2,'Global values');
  986.       addbytefield(  'Task number                   :',2,2,'###',2,34,760,0,99,cfg.tasknumber);
  987.       AddYesNoField( 'Task number is in hex         :',3,2,'',3,34,766, Cfg.HexTask);
  988.       AddTimeField(  'Delay between outbound reread :',6,2,'hh:mm:ss',6,34,761,60,SecondsInDay,cfg.OutReReadDelay);
  989.       AddYesNoField( 'Rescan on dial if no mail     :',7,2,'',7,34,765,Cfg.RereadOnCall);
  990.       AddStringField('Password for function request :',9,2,CharStr('!',20),9,34,20,762,Cfg.FuncReqPwd);
  991.       AddYesNoField( 'Swap on exec                  :',11,2,'',11,34,763,Cfg.SwapOnExec);
  992.       AddYesNoField( 'Keep empty outbound dir''s     :',13,2,'',13,34,764,Cfg.KeepEmptyDirs);
  993.       addchoicefield('Task type                     :',15,2,'XXXXXXXXXXXXXXX',15,34,0,1,IncTaskType,cfg.TaskType);
  994.       addstringfield('BBS Definition file           :',17,2,'!!!!!!!!',17,34,8,0,Cfg.BBS.DefFile);
  995.       SetUserRecord(cfg, SizeOf(cfg));
  996.     end;
  997.   end;
  998.  
  999.   procedure MakeInboundToDoScreen;
  1000.   begin
  1001.     with Esr^ do
  1002.     begin
  1003.       Esr^.init(2,3,79,ScreenHeight-1,2,'Inbound Control');
  1004.       addtextfield('Unknown', 2, 25);
  1005.       addtextfield('Known', 2, 39);
  1006.       addtextfield('Password', 2, 55);
  1007.  
  1008.       AddBitYesNoField( 'Process tick files :',3,2,'',3,28,800,0,Cfg.InboundToDo[nsUnknown]);
  1009.       AddBitYesNoField( 'Process tick files :',3,2,'',3,43,800,0,Cfg.InboundToDo[nsKnown]);
  1010.       AddBitYesNoField( 'Process tick files :',3,2,'',3,58,800,0,Cfg.InboundToDo[nsPassword]);
  1011.  
  1012.       AddBitYesNoField( 'Forward files      :',4,2,'',4,28,801,1,Cfg.InboundToDo[nsUnknown]);
  1013.       AddBitYesNoField( 'Forward files      :',4,2,'',4,43,801,1,Cfg.InboundToDo[nsKnown]);
  1014.       AddBitYesNoField( 'Forward files      :',4,2,'',4,58,801,1,Cfg.InboundToDo[nsPassword]);
  1015.  
  1016.       AddBitYesNoField( 'Process mail       :',5,2,'',5,28,802,2,Cfg.InboundToDo[nsUnknown]);
  1017.       AddBitYesNoField( 'Process mail       :',5,2,'',5,43,802,2,Cfg.InboundToDo[nsKnown]);
  1018.       AddBitYesNoField( 'Process mail       :',5,2,'',5,58,802,2,Cfg.InboundToDo[nsPassword]);
  1019.       SetUserRecord(cfg, SizeOf(cfg));
  1020.     end;
  1021.   end;
  1022.  
  1023. {=== Misc. entry screens ====================================================}
  1024.  
  1025.   PROCEDURE NLMan;
  1026.   var
  1027.     exitcommand : byte;
  1028.   begin
  1029.     WITH Esr^,nodelistentry DO
  1030.     BEGIN
  1031.       Esr^.init(2,3,79,ScreenHeight-3,2,'Nodelist manager');
  1032.       AddIntField('Address      :',4,3,'####',4,19,1000,0,0,Adr.Zone);
  1033.       AddIntField(':',4,24,'#####',4,25,1000,0,0,Adr.Net);
  1034.       AddIntField('/',4,30,'#####',4,31,1000,0,0,Adr.Node);
  1035.       AddIntField('.',4,36,'#####',4,37,1000,0,0,Adr.Point);
  1036.       addstringfield('System name  :',6,3,'',6,19,34,1001,SystemName);
  1037.       addstringfield('SysOp name   :',7,3,'',7,19,30,1002,SysopName);
  1038.       AddIntField('Hub node     :',6,58,'#####',6,74,1003,0,32767,HubNode);
  1039.       addstringfield('Misc. info   :',8,3,'',8,19,30,1004,MiscInfo);
  1040.       AddWordField('Baudrate     :',8,58,'#####',8,74,1005,0,38400,BaudRate);
  1041.       AddWordField('Cost         :',10,3,'#####',10,19,1006,0,0,Cost);
  1042.       addbytefield('Modem type   :',10,58,'###',10,74,1007,0,0,ModemType);
  1043.       AddWordField('Real cost    :',12,3,'#####',12,19,1008,0,65535,RealCost);
  1044.       addstringfield('Phone number :',14,3,'',14,19,40,1009,PhoneNumber);
  1045.       addstringfield('Password     :',16,3,'',16,19,8,1010,Password);
  1046.       AddTextField('Flags        :',18,3);
  1047.  
  1048.       FOR ExitCommand:=0 TO 8 DO
  1049.         EntryCommands.addcommand(ccUser2+ExitCommand,1,WORD(256*(60+ExitCommand)),0);
  1050.       SetUserRecord(nodelistentry, SizeOf(nodelistentry));
  1051.     end;
  1052.   end;
  1053.  
  1054.  
  1055. {=== UserBrowser ============================================================}
  1056.  
  1057.   PROCEDURE UserMaxScreen;
  1058.   VAR
  1059.     Ur:MaximusUserType;
  1060.   BEGIN
  1061.     Esr^.Init(2,3,79,ScreenHeight-3,3,'Maximus 2.0 user');
  1062.     With Esr^ do
  1063.     BEGIN
  1064.       EsFieldOptionsOff(efClearFirstChar);
  1065.       AddTextField(  'User No. :',1,2);
  1066.         EsFieldOptionsOn(EfProtected);
  1067.       AddStringField('Name     :',2,2,'',2,13,35,1020,Ur.Name);
  1068.       AddDateStField('Last date:',3,50,'dd/mm-yy',3,61,1021,Ur.Diverse.TempDate);
  1069.       AddTimeField(  'Last time:',4,50,'hh:mm:ss',4,61,1022,0,0,UR.Diverse.TempTime);
  1070.         EsFieldOptionsOff(EfProtected);
  1071.       AddChoiceField('Level    :',3,2,'XXXXXXXXXXXXXXX',3,13,1023,2,UserEdit.IncMaximusUserLevel,ur.Priv);
  1072.       AddStringField('City     :',4,2,'',4,13,35,1024,ur.City);
  1073.       AddStringField('Alias    :',5,2,'',5,13,20,1025,ur.Alias);
  1074.       AddStringField('Phone    :',6,2,'',6,13,14,1026,ur.Phone);
  1075.       AddWordField(  'Calls    :',6,50,'#####',6,61,1027,0,0,ur.Times);
  1076.   {    AddStringField('Pwd.     : ',7,2,'',7,13,15,0,UserRecord7.Pwd);}
  1077.         EsFieldOptionsOn(EfPassWordMode);
  1078.       AddStringField('Password :',7,2,'',7,13,15,1028,ur.Pwd);
  1079.         EsFieldOptionsOff(EfPassWordMode);
  1080.   {    AddWordField(  'Msg.Area : ',10,2,'###',10,13,5,0,255,UserRecord3.MSG);}
  1081.   {    AddWordField(  'FileArea : ',10,50,'###',10,61,5,0,255,UserRecord3.Files);}
  1082.       AddlongField(  'Upload Kb:',11,2,'########',11,13,1029,0,0,ur.Up);
  1083.       AddWordField(  'TimeToday:',11,50,'#####',11,61,1030,0,0,ur.Time);
  1084.       AddLongField(  'Dnload Kb:',12,2,'########',12,13,1031,0,0,ur.Down);
  1085.       AddLongField(  'Dnl.Today:',12,50,'#####',12,61,1032,0,0,ur.DownToDay);
  1086.       AddTextField(  'UL-Ratio : 1 :',13,50);
  1087.   {   AddLongField( 'ExtraInfo: ',13,2,'#####',13,13,5,0,0,ur.Extra); }
  1088.       AddChoiceField( 'Help Lvl : ',14,2,'XXXXXXXX',14,13,0,1,UserEdit.IncMaxHelpLevel,Ur.Help);
  1089.       AddChoiceField( 'Video    : ',14,50,'XXXXXXXX',14,61,0,1,UserEdit.IncMaxVideoLevel,Ur.Video);
  1090. {      AddChoiceField( 'Protocol : ',15,2,'XXXXXXXXX',15,13,0,1,UserEdit.IncMaxProtocol,Ur.DefProto); }
  1091. {      AddShortField( 'Protocol : ',15,2,'####',15,13,0,0,0,Ur.DefProto);}
  1092.  
  1093.       AddTextField('12345678ABCDEFGHIJKLMNOPQRSTUVWX',17,8);
  1094.       EsFieldOptionsOn(efForceOvertype);
  1095.       EsFieldOptionsOn(efForceMode);
  1096.       AddUserField('Keys :',18,2,'11111111111111111111111111111111',18,8,32,1033,Bin32Lo,Bin32Hi,4,0,UserEdit.ValidateBin32,
  1097.                    Useredit.BinConv32,DrawString,StringEditor,ur.xKeys);
  1098.       SetUserRecord(ur,SizeOf(ur));
  1099.     END;
  1100.   END;
  1101.  
  1102.   PROCEDURE MakeUserQBBSMain;
  1103.   VAR
  1104.     ur:QBBSUserType;
  1105.   BEGIN
  1106.     Esr^.init(2,3,79,ScreenHeight-3,3,'QuickBBS user');
  1107.     With Esr^,ur do
  1108.     BEGIN
  1109.       EsFieldOptionsOff(efClearFirstChar);
  1110.       AddTextField(  'User #   :',1,2);
  1111.       AddWordField(  'Level    :',2,2,'#####',2,13,1040,0,32767,SecLvl);
  1112.       AddStringField('Name     :',3,2,'',3,13,35,1041,Name);
  1113.       AddDateStField('Last date:',3,50,'dd/mm-yy',3,61,1042,Diverse.TempDate);
  1114.       AddStringField('City     :',4,2,'',4,13,25,1043,City);
  1115.       AddTimeField(  'Last time:',4,50,'hh:mm',4,61,1044,0,0,Diverse.TempTime);
  1116.       AddStringField('HomePhone:',5,2,'',5,13,12,1045,HomePhone);
  1117.       AddStringField('DataPhone:',5,50,'',5,61,12,1046,DataPhone);
  1118.       EsFieldOptionsOn(efPassWordMode);
  1119.       AddStringField('Password :',6,2,'',6,13,15,1047,Pwd);
  1120.       EsFieldOptionsOff(efPassWordMode);
  1121.       AddWordField(   'Calls    :',6,50,'#####',6,61,1048,0,0,Times);
  1122.       AddWordField(   'Credit   :',7,2,'#####',7,13,1049,0,0,Credit);
  1123.       AddWordField(   'Pending  :',7,50,'#####',7,61,1050,0,0,Pending);
  1124.       AddWordField(   'Posted   :',8,2,'#####',8,13,1051,0,0,TimesPosted);
  1125.       AddWordField(   'HighMsgRd:',8,50,'#####',8,61,1052,0,0,HighMsgRead);
  1126.       AddWordField(   'Downloads:',10,2,'#####',10,13,1053,0,0,Downs);
  1127.       AddWordField(   'Uploads  :',10,50,'#####',10,61,1054,0,0,Ups);
  1128.       AddWordField(   'Dnload Kb:',11,2,'#####',11,13,1055,0,0,DownK);
  1129.       AddWordField(   'Upload Kb:',11,50,'#####',11,61,1056,0,0,UpK);
  1130.       AddTextField(   'UL-Ratio : 1 :',12,50);
  1131.       addDatefield(   'Birthday :',13,2,'dd/mm-yy',13,13,1057,0,0,BirthDay);
  1132.       EsFieldOptionsOn(efForceOvertype);
  1133.       EsFieldOptionsOn(efForceMode);
  1134.       AddTextField(  '87654321',15,13);
  1135.       AddUserField(  'A-Flags  :',16,2,'11111111',16,13,32,1058,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1136.                    DrawString,StringEditor,Flags.A);
  1137.       AddUserField(  'B-Flags  :',17,2,'11111111',17,13,32,1058,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1138.                    DrawString,StringEditor,Flags.B);
  1139.       AddUserField(  'C-Flags  :',18,2,'11111111',18,13,32,1058,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1140.                    DrawString,StringEditor,Flags.C);
  1141.       AddUserField(  'D-Flags  :',19,2,'11111111',19,13,32,1058,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1142.                    DrawString,StringEditor,Flags.D);
  1143.       SetUserRecord(ur,SizeOf(ur));
  1144.     END;
  1145.   END;
  1146.  
  1147.   PROCEDURE MakeUserSBBSMain;
  1148.   VAR
  1149.     ur:SBBSUserType;
  1150.     Ex:ExtraUserRec;
  1151.   BEGIN
  1152.     Esr^.init(2,3,79,ScreenHeight-3,3,'SuperBBS user');
  1153.     With Esr^,ur do
  1154.     BEGIN
  1155.       EsFieldOptionsOff(efClearFirstChar);
  1156.       AddTextField(  'User #   :',1,2);
  1157.       AddWordField(  'Level    :',2,2,'#####',2,13,1040,0,32767,SecLvl);
  1158.       AddStringField('Name     :',3,2,'',3,13,35,1041,Name);
  1159.       AddDateStField('Last date:',3,50,'dd/mm-yy',3,61,1042,Diverse.TempDate);
  1160.       AddStringField('City     :',4,2,'',4,13,25,1043,City);
  1161.       AddTimeField(  'Last time:',4,50,'hh:mm',4,61,1044,0,0,Diverse.TempTime);
  1162.       AddStringField('HomePhone:',5,2,'',5,13,12,1045,HomePhone);
  1163.       AddStringField('DataPhone:',5,50,'',5,61,12,1046,DataPhone);
  1164.       EsFieldOptionsOn(efPassWordMode);
  1165.       AddStringField('Password :',6,2,'',6,13,15,1047,Password);
  1166.       EsFieldOptionsOff(efPassWordMode);
  1167.       AddWordField(   'Calls    :',6,50,'#####',6,61,1048,0,0,Times);
  1168.       AddIntField(    'Credit   :',7,2,'#####',7,13,1049,0,0,Credit);
  1169.       AddIntField(    'Pending  :',7,50,'#####',7,61,1050,0,0,Pending);
  1170.       AddWordField(   'Posted   :',8,2,'#####',8,13,1051,0,0,MsgsPosted);
  1171.       AddWordField(   'HighMsgRd:',8,50,'#####',8,61,1052,0,0,HighMsgRead);
  1172.       AddByteField(   'Age      :',9,2,'###',9,13,0,0,255,Age);
  1173.       AddWordField(   'Downloads:',10,2,'#####',10,13,1053,0,0,Downs);
  1174.       AddWordField(   'Uploads  :',10,50,'#####',10,61,1054,0,0,Ups);
  1175.       AddWordField(   'Dnload Kb:',11,2,'#####',11,13,1055,0,0,DownK);
  1176.       AddWordField(   'Upload Kb:',11,50,'#####',11,61,1056,0,0,UpK);
  1177.       AddTextField(   'UL-Ratio : 1 :',12,50);
  1178.       EsFieldOptionsOn(efForceOvertype);
  1179.       EsFieldOptionsOn(efForceMode);
  1180.       AddTextField(  '87654321',15,13);
  1181.       AddUserField(  'A-Flags  :',16,2,'11111111',16,13,32,1058,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1182.                    DrawString,StringEditor,Flags.A);
  1183.       AddUserField(  'B-Flags  :',17,2,'11111111',17,13,32,1058,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1184.                    DrawString,StringEditor,Flags.B);
  1185.       AddUserField(  'C-Flags  :',18,2,'11111111',18,13,32,1058,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1186.                    DrawString,StringEditor,Flags.C);
  1187.       AddUserField(  'D-Flags  :',19,2,'11111111',19,13,32,1058,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1188.                    DrawString,StringEditor,Flags.D);
  1189.       SetUserRecord(ur,SizeOf(ur));
  1190.     END;
  1191.   END;
  1192.  
  1193.   PROCEDURE MakeUserSBBSExtra;
  1194.   VAR
  1195.     Ex:ExtraUserRec;
  1196.   BEGIN
  1197.     WITH Esr^,Ex DO
  1198.     BEGIN
  1199.       init(2,3,79,ScreenHeight-3,3,'SuperBBS Extra information');
  1200.       EsFieldOptionsOff(efClearFirstChar);
  1201.       EsFieldOptionsOn(efProtected);
  1202.       AddStringField('Name          :',2,2,'',2,18,35,0,Name);
  1203.       AddStringField('First date    :',3,2,'XXXXXXXX',3,18,8,0,FirstTime);
  1204.       AddStringField('First time    :',4,2,'XXXXX',4,18,5,0,FirstDate);
  1205.       EsFieldOptionsOff(efProtected);
  1206.       AddDateStField('Birthday      :',5,2,'dd-mm-yy',5,18,0,BirthDay);
  1207.       AddStringField('Comment       :',6,2,CharStr('!',50),6,18,80,0,SysopComment);
  1208.       AddStringField('Alias         :',7,2,'',7,18,35,0,Alias);
  1209.       AddStringField('View file     :',8,2,'',8,18,12,0,ViewFileName);
  1210.       AddStringField('First Menu    :',9,2,'',9,18,8,0,MenuToRun);
  1211.       AddWordField(  'Time in bank  :',10,2,'#####',10,18,0,0,0,TimeInBank);
  1212.       AddByteField(  'Calls today   :',10,2,'#####',10,18,0,0,0,TodayCalls);
  1213.       AddStringField('Language      :',11,2,'',11,18,8,0,LanguageFileN);
  1214.  
  1215.       SetUserRecord(Ex,SizeOf(Ex));
  1216.     END;
  1217.   END;
  1218.  
  1219.   PROCEDURE MakeUserRAMain;
  1220.   VAR
  1221.     ur:RAUserType;
  1222.   BEGIN
  1223.     Esr^.init(2,3,79,ScreenHeight-3,3,'RemoteAccess user');
  1224.     With Esr^ do
  1225.     BEGIN
  1226.       EsFieldOptionsOff(efClearFirstChar);
  1227.       AddTextField(  'User #   :',1,2);
  1228.       EsFieldOptionsOn(EfProtected);
  1229.       AddStringField('Name     :',2,2,'',2,13,35,1060,ur.Name);
  1230.       AddDateStField('Last date:',2,50,'dd/mm-yy',2,61,1061,ur.LastDate);
  1231.       EsFieldOptionsOff(EfProtected);
  1232.       AddWordField(  'Level    :',3,2,'#####',3,13,1062,0,65535,ur.Security);
  1233.       AddStringField('City     :',4,2,'',4,13,25,1063,ur.Location);
  1234. (*    AddTimeStField('Last Time: ',4,50,'hh:mm',4,61,2005,0,0,ur.LastTime); *)
  1235.       AddStringField('HomePhone:',5,2,'',5,13,12,1064,ur.VoicePhone);
  1236.       AddStringField('DataPhone:',5,50,'',5,61,12,1065,ur.DataPhone);
  1237.       EsFieldOptionsOn(efPassWordMode);
  1238.       AddStringField('Password :',6,2,'',6,13,15,1066,ur.Password);
  1239.       EsFieldOptionsOff(efPassWordMode);
  1240.       AddWordField(  'Calls    :',6,50,'#####',6,61,1067,0,0,ur.NoCalls);
  1241.       AddWordField(  'Credit   :',7,2,'#####',7,13,1068,0,0,ur.Credit);
  1242.       AddWordField(  'Pending  :',7,50,'#####',7,61,1069,0,0,ur.Pending);
  1243.       AddWordField(  'Posted   :',8,2,'#####',8,13,1070,0,0,ur.MsgsPosted);
  1244.       AddWordField(  'HighMsgRd:',8,50,'#####',8,61,1071,0,0,ur.LastRead);
  1245.       AddWordField(  'Downloads:',10,2,'#####',10,13,1072,0,0,ur.Downloads);
  1246.       AddWordField(  'Uploads  :',10,50,'#####',10,61,1073,0,0,ur.Uploads);
  1247.       AddWordField(  'Dnload Kb:',11,2,'#####',11,13,1074,0,0,ur.DownloadsK);
  1248.       AddWordField(  'Upload Kb:',11,50,'#####',11,61,1075,0,0,ur.UploadsK);
  1249.       AddTextField(  'UL-Ratio : 1 :',12,50);
  1250. (*    addDatefield(  'Birthday : ',13,2,'dd/mm-yy',13,13,0,0,0,UserRecord1.BirthDay); *)
  1251.       EsFieldOptionsOn(efForceOvertype);
  1252.       EsFieldOptionsOn(efForceMode);
  1253.       AddTextField(  '87654321',15,13);
  1254.       AddUserField(  'A-Flags  :',16,2,'11111111',16,13,32,1078,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1255.                    DrawString,StringEditor,ur.Flags.A);
  1256.       AddUserField(  'B-Flags  :',17,2,'11111111',17,13,32,1078,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1257.                    DrawString,StringEditor,ur.Flags.B);
  1258.       AddUserField(  'C-Flags  :',18,2,'11111111',18,13,32,1078,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1259.                    DrawString,StringEditor,ur.Flags.C);
  1260.       AddUserField(  'D-Flags  :',19,2,'11111111',19,13,32,1078,BinLo,BinHi,1,0,ValidateBin,BinConv,
  1261.                    DrawString,StringEditor,ur.Flags.D);
  1262.  
  1263.       SetUserRecord(ur,SizeOf(ur));
  1264.     END;
  1265.   END;
  1266.  
  1267.   PROCEDURE MakeUserOPUS110Main;
  1268.   VAR
  1269.     ur:Opus110UserType;
  1270.   BEGIN
  1271.     Esr^.init(2,3,79,ScreenHeight-3,3,'Opus v1.10 user');
  1272.     With Esr^,ur do
  1273.     BEGIN
  1274.       EsFieldOptionsOff(efClearFirstChar);
  1275.       AddTextField(  'User No. :',1,2);
  1276. {    AddTextField(  'User CRC : ',1,50);}
  1277.       EsFieldOptionsOn(EfProtected);
  1278.       AddStringField('Name     :',2,2,'',2,13,35,1080,Name);
  1279.       AddDateStField('Last date:',3,50,'dd/mm-yy',3,61,1081,Diverse.TempDate);
  1280.       AddTimeField(  'Last time:',4,50,'hh:mm:ss',4,61,1082,0,0,Diverse.TempTime);
  1281.       EsFieldOptionsOff(EfProtected);
  1282.       AddChoiceField('Level    :',3,2,'XXXXXXXXXXXXXXX',3,13,1083,1,IncOpusUserLevel,ClassPriv);
  1283.       AddStringField('City     :',4,2,'',4,13,35,1084,City);
  1284.       AddStringField('Alias    :',5,2,'',5,13,31,1085,Alias);
  1285.       AddStringField('Phone    :',6,2,'',6,13,15,1086,UsrTel);
  1286.       AddWordField(  'Calls    :',6,50,'#####',6,61,1087,0,0,Times);
  1287.       EsFieldOptionsOn(efPassWordMode);
  1288.       AddStringField('Password :',7,2,'',7,13,15,1088,Pwd);
  1289.       EsFieldOptionsOff(efPassWordMode);
  1290.       AddWordField(  'Msg.area :',10,2,'###',10,13,1089,0,255,MSG);
  1291.       AddWordField(  'Filearea :',10,50,'###',10,61,1090,0,255,Files);
  1292.       AddlongField(  'Upload Kb:',11,2,'########',11,13,1091,0,0,Upld);
  1293.       AddIntField(   'TimeToday:',11,50,'#####',11,61,1092,0,0,Time);
  1294.       AddLongField(  'Dnload Kb:',12,2,'########',12,13,1093,0,0,DnLd);
  1295.       AddIntField(   'Dnl.today:',12,50,'#####',12,61,1094,0,0,DnLdl);
  1296.       AddTextField(  'UL-Ratio : 1 :',13,50);
  1297.       AddTextField('ABCDEFGHIJKLMNOPQRSTUVWXYZ012345',17,8);
  1298.       EsFieldOptionsOn(efForceOvertype);
  1299.       EsFieldOptionsOn(efForceMode);
  1300.       AddUserField('Keys :',18,2,'11111111111111111111111111111111',18,8,32,1095,BinLo,BinHi,1,0,ValidateBin32,BinConv32,
  1301.                    DrawString,StringEditor,ClassLock);
  1302.       SetUserRecord(ur,SizeOf(ur));
  1303.     END;
  1304.   END;
  1305.  
  1306.   PROCEDURE Edit_Combined;      { EDIT Combined record }
  1307.   VAR
  1308.     x,y      : byte;
  1309.     Combined : CombinedType;
  1310.   BEGIN
  1311.     Esr^.init(2,3,79,22,4,'Combined record');
  1312.     for y := 0 to 19 do
  1313.       for x := 1 to 10 do
  1314.         Esr^.AddYesNoField(longIntForm('###',y*10+x)+':',y+1,x*7-2,'',y+1,x*7+3,1100,combined[y*10+x]);
  1315.     Esr^.SetUserRecord(Combined,SizeOf(Combined));
  1316.   END;
  1317.  
  1318.   PROCEDURE Edit_LastRead;      { EDIT LastRead record }
  1319.   VAR
  1320.     x,y      : byte;
  1321.     LastRead : LastReadType;
  1322.   BEGIN
  1323.     Esr^.Init(2, 3, 79, 22, 4,'LastRead Record');
  1324.     for y := 0 to 39 do
  1325.       for x := 1 to 5 do
  1326.           Esr^.AddIntField(longIntForm('###',y*5+x)+':',y+1,x*14-6,'#####',y+1,x*14-1,0,0,32767,LastRead[y*5+x]);
  1327.     Esr^.SetUserRecord(LastRead,SizeOf(LastRead));
  1328.   END;
  1329.  
  1330.   PROCEDURE MakeMailScanScreen;
  1331.   VAR
  1332.     rp:RunParametersType;
  1333.   BEGIN
  1334.     Esr^.Init(2,3,79,22,3,'Mailscanner: Run parameters');
  1335.     WITH Esr^ DO
  1336.     BEGIN
  1337.       EsFieldOptionsOn(efClearFirstChar);
  1338.       AddYesNoField('Toss  :',1,2,'',1,10,0,rp.Toss);
  1339.       AddYesNoField('Scan  :',2,2,'',2,10,0,rp.Scan);
  1340.       AddYesNoField('Pack  :',3,2,'',3,10,0,rp.Pack);
  1341.       AddByteField( 'Sched :',4,2,'###',4,10,0,0,255,rp.Sched);
  1342.       SetNextField(3);
  1343.       SetUserRecord(rp,SizeOf(rp));
  1344.     END;
  1345.   END;
  1346.  
  1347.   PROCEDURE MakePOPEDHeader;
  1348.   VAR
  1349.     th : TPopEdHeader;
  1350.   BEGIN
  1351.     Esr^.Init(2,2,79,6,3,'PopEd v'+ver);
  1352.     WITH Esr^ DO
  1353.     BEGIN
  1354.       EsFieldOptionsOn(efClearFirstChar);
  1355.       AddStringField('From :',2,2,'',2,9,35,0,th.FromName);
  1356.       AddStringField(' ',2,44,'',2,45,20,0,th.FromAddr);
  1357.       AddStringField('To   :',3,2,'',3,9,35,0,th.ToName);
  1358.       AddStringField(' ',3,44,'',3,45,20,0,th.ToAddr);
  1359.       AddStringField('Subj.:',4,2,'',4,9,62,0,th.Subj);
  1360.       SetUserRecord(th,SizeOf(th));
  1361.     END;
  1362.   END;
  1363.  
  1364. {=== Initialization =========================================================}
  1365.  
  1366.   PROCEDURE InitLib;
  1367.   BEGIN
  1368.     cfg.color[1]:=defaultcolorset;
  1369.     cfg.color[2]:=defaultcolorset;
  1370.     cfg.color[3]:=defaultcolorset;
  1371.     cfg.color[4]:=defaultcolorset;
  1372.  
  1373.     New(Lib, Init(PoPResourceFileName,SOpen,10240,'POP-RES'));
  1374.     if Lib=NIL then New(Lib, Create(PoPResourceFileName,10240,'POP-RES',2048));
  1375.     Lib^.RegisterHier(TPoPMenuStream);
  1376.     Lib^.RegisterHier(TPoPEntryScreenStream);
  1377.     Lib^.RegisterHier(AllEntryFieldsStream);
  1378.     Lib^.RegisterHier(TBitYesNoFieldStream);
  1379.     Lib^.RegisterPointer(1000, @Cfg);
  1380.     Lib^.RegisterPointer(1001, @IncBBSType);
  1381.     Lib^.RegisterPointer(1002, @IncNodelist);
  1382.     Lib^.RegisterPointer(1003, @NodelistEntry);
  1383.     Lib^.RegisterPointer(1004, @Str2Bin);
  1384.     Lib^.RegisterPointer(1005, @ValidateBin);
  1385.     Lib^.RegisterPointer(1006, @BinConv);
  1386.     Lib^.RegisterPointer(1007, @NodesRec);
  1387.     Lib^.RegisterPointer(1008, @IncNodeStat);
  1388.     Lib^.RegisterPointer(1009, @IncModemType);
  1389.     Lib^.RegisterPointer(1010, @IncFreeArea);
  1390.     Lib^.RegisterPointer(1011, @CurrentEvent);
  1391. {   Lib^.RegisterPointer(1012, @NodeListSegRec);}
  1392.     Lib^.RegisterPointer(1013, @UserEdit.IncOPUSUserLevel);
  1393.     Lib^.RegisterPointer(1014, @UserEdit.IncMaximusUserLevel);
  1394.     Lib^.RegisterPointer(1015, @UserEdit.BinConv32);
  1395.     Lib^.RegisterPointer(1016, @UserEdit.ValidateBin32);
  1396. {   Lib^.RegisterPointer(1017, @UserEDit.Combined);
  1397.     Lib^.RegisterPointer(1018, @UserEdit.UserRecord7);
  1398.     Lib^.RegisterPointer(1019, @UserEdit.UserRecord1);
  1399.     Lib^.RegisterPointer(1020, @UserEdit.UserRecord4);
  1400.     Lib^.RegisterPointer(1021, @UserEdit.UserRecord3);}
  1401. {   Lib^.RegisterPointer(1022, @AreasRec);}
  1402.     Lib^.RegisterPointer(1023, @IncArcType);
  1403.     Lib^.RegisterPointer(1024, @MailCfg.IncSCDAction);
  1404.     Lib^.RegisterPointer(1025, @UserEdit.IncMaxHelpLevel);
  1405.     Lib^.RegisterPointer(1026, @UserEdit.IncMaxVideoLevel);
  1406.     Lib^.RegisterPointer(1027, @UserEdit.IncMaxProtocol);
  1407.     Lib^.RegisterPointer(1028, @MailCfg.IncAKAUsed);
  1408.     Lib^.RegisterPointer(1029, @IncTaskType);
  1409.     Lib^.RegisterPointer(1030, @IncReqOnUs);
  1410.   END;
  1411.  
  1412. BEGIN
  1413.   New(Esr);
  1414.   InitLib;
  1415.  
  1416.   MiscScreen;                    PutEsr(EsrMiscScreen);
  1417.   GlobalValues;                  PutEsr(EsrGlobalVal);
  1418.   ArchiverSetUp;                 PutEsr(EsrArcSetup);
  1419.   DirAndFiles;                   PutEsr(EsrDirAndFiles) ;
  1420.   ModemOptions;                  PutEsr(EsrMdmOptions) ;
  1421.   Matrix_Info;                   PutEsr(EsrMatrixInfo) ;
  1422.   DumbTerminalSetup;             PutEsr(EsrDumbTermSetup) ;
  1423.   DumbTerminalExternalProtocols; PutEsr(EsrDumbTermExt) ;
  1424.   NodelistCompilerSetup;         PutEsr(EsrNLCompSetup) ;
  1425.   NLCompilerTranslationSetup;    PutEsr(EsrNLTranslatSetup) ;
  1426.   ConnectionSetup;               PutEsr(EsrConnectionSetup) ;
  1427.   AreaManagerConfiguration;      PutEsr(EsrAreaManSetup) ;
  1428.   MultiBBSSetUp;                 PutEsr(EsrMultiBBSSetup) ;
  1429.   NetMail;                       PutEsr(EsrNetmailSetup) ;
  1430.   EchoMail;                      PutEsr(EsrEchoMailSetup) ;
  1431.   MiscOptions;                   PutEsr(EsrMailScanMisc) ;
  1432.   FwdMiscOptions;                PutEsr(EsrFileFwdMisc) ;
  1433.   NLMan;                         PutEsr(EsrNLManager) ;
  1434.   Limits;                        PutEsr(EsrReqLimits) ;
  1435.   MakeNodesScreen;               PutEsr(EsrNodesSetup) ;
  1436.   MakeFwdScreen;                 PutEsr(EsrFileFwdSetup) ;
  1437.   MakeOkFileScreen;              PutEsr(EsrOkFileSetup) ;
  1438.   InitTickSetup;                 PutEsr(EsrTickSetup) ;
  1439.   MakeTickMiscScreen;            PutEsr(EsrMiscTickSetup) ;
  1440.   MakeEventScreen;               PutEsr(EsrEventSetup) ;
  1441.   NodelistSegSetup;              PutEsr(EsrNodelistSeg) ;
  1442.   MakeEchoAreas;                 PutEsr(EsrEchoAreas);
  1443.   ListFiles;                     PutEsr(EsrListFiles) ;
  1444.   ListFiles2;                    PutEsr(EsrListFiles2) ;
  1445.   MultiListSegment;              PutEsr(EsrMFSSetup) ;
  1446.   Edit_combined;                 PutEsr(EsrUserQBBSCombined);
  1447.   Edit_LastRead;                 PutEsr(EsrUserLastRead);
  1448.   UserMaxScreen;                 PutEsr(EsrUserMaximusMain);
  1449.   MakeUserSBBSMain;              PutEsr(EsrUserSBBSMain);
  1450.   MakeUserSBBSExtra;             PutEsr(EsrUserSBBSExtra);
  1451.   MakeUserQBBSMain;              PutEsr(EsrUserQBBSMain);
  1452.   MakeUserRAMain;                PutEsr(EsrUserRAMain);
  1453.   MakeUserOPUS110Main;           PutEsr(EsrUserOPUS110Main);
  1454.   MakeFuncKeyScreen;             PutEsr(EsrFuncKeys);
  1455.   AdvModemOPtions;               PutEsr(EsrAdvMdmOptions);
  1456.   MakeSchedulerScreen;           PutEsr(EsrScheduleSetup);
  1457.   MakeInboundToDoScreen;         PutEsr(EsrInboundToDoSetup);
  1458.   MakePopEdHeader;               PutEsr(EsrPopEdHeader);
  1459.   MakeMdmConnStat;               PutEsr(EsrMdmConnStat);
  1460. {$IFNDEF NOMAILSCANNER}
  1461.   MakeMailScanScreen;            PutEsr(EsrMailScanParams);
  1462. {$ENDIF}
  1463.   Lib^.Pack;
  1464.   Dispose(Lib, Done);
  1465.   Dispose(Esr);
  1466. end.
  1467.